//
//  RZConversationListViewController.h
//  RZIM
//
//  Created by reyzhang on 2021/8/3.
//  会话列表

#import "RZIMBaseViewController.h"
#import "RZConversation.h"
#import "RZIMDefine.h"
#import "RZConversationBaseCell.h"


NS_ASSUME_NONNULL_BEGIN

@interface RZConversationListViewController : RZIMBaseViewController<UITableViewDataSource, UITableViewDelegate>

/*!
 列表中需要显示的会话类型数组

 @discussion 数组中的元素为RZConversationType转换的NSNumber
 */
@property (nonatomic, strong) NSArray *displayConversationTypeArray;

/**
 会话分组
 */
@property (nonatomic, assign) NSInteger label;

/*!
 列表的TableView
 */
@property (nonatomic, strong) UITableView *conversationListTableView;

/*!
 列表为空时显示的View
 */
@property (nonatomic, strong) UIView *emptyConversationView;

/**
 会话列表页面是否处于 appear 状态，主要是当会话列表页面不出现的时候，收到消息不用刷新会话列表页面，等会话列表页 viewWillAppear 时候会重新获取会话
 */
@property (nonatomic, assign) BOOL isConverstaionListAppear;

/**
 会话的数据源
 */
@property (nonatomic, strong) NSMutableArray *dataArray;


/**
 初始化
 @displayConversationTypeArray  显示的会话类型
 @label 分组会话
 */
- (instancetype)initWithDisplayConversationTypes:(NSArray *)displayConversationTypeArray label:(NSInteger)label;

- (instancetype)initWithDisplayConversationTypes:(NSArray *)displayConversationTypeArray;




#pragma mark 对外的勾子方法（父类方法，允许被子类重写）

/**
 获取数据时，使用菊花组件
 */
- (void)startShowHUD;

/**
 数据获取后，隐藏菊花组件
 */
- (void)endHideHUD;


/**
 对外公开 获取会话后的数据拦截。 可进行数据加工处理
 */
- (NSMutableArray<RZConversation *> *)willReloadTableData:(NSMutableArray<RZConversation *> *)dataSource;


/**
 对外公开， cell已创建，用来配置cell样式
 */
- (void)willDisplayConversationTableCell:(RZConversationBaseCell *)cell
                             atIndexPath:(NSIndexPath *)indexPath;


/**
 对外公开获取cell高度的方法
 */
- (CGFloat)rzConversationListTableView:(UITableView *)tableView
               heightForRowAtIndexPath:(NSIndexPath *)indexPath;

/**
 对外公开，cell被选中后的事件处理
 */
- (void)onSelectedTableRow:(UITableView *)tableView
         conversationModel:(RZConversation *)model
               atIndexPath:(NSIndexPath *)indexPath;

/**
 对外公开，cell删除后的事件处理
 */
- (void)onDeletedTableRowAtIndexPath:(NSIndexPath *)indexPath;


/**
 刷新数据源
 */
- (void)refreshConversationTableViewIfNeeded;


@end

NS_ASSUME_NONNULL_END
